package com.jumi.microservice.material.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jumi.microservice.material.domain.JmGoods;
import com.jumi.microservice.material.dto.JmGoodsRequest;
import com.jumi.microservice.material.dto.JmGoodsResponse;
import com.jumi.microservice.material.dto.JmMaterialResponse;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @author ssk
 * @create 2020/8/4 14:33
 **/
public interface JmGoodsMapper extends BaseMapper<JmGoods> {

    /**
     * 保存方法
     * @param jmGoods
     * @return
     */
    int save(JmGoods jmGoods);

    /**
     * 更新方法
     * @param jmGoods
     * @return
     */
    int update(JmGoods jmGoods);

    /**
     * 根据商品ID软删除
     * @param goodsId
     */
    void deleteById(Long goodsId);

    /**
     * 根据商品ID批量软删除
     * @param goodsIds
     */
    void deleteBatch(Long[] goodsIds);

    int findCountByCateId(Long cateId);

    /**
     * 根据goodsId查询结果
     * @param goodsId
     * @return
     */
    JmGoodsResponse findById(Long goodsId);

    /**
     * 根据条件查询商品结果集
     * @param jmGoodsRequest
     * @return
     */
    List<JmGoodsResponse> findAll(JmGoodsRequest jmGoodsRequest);

    List<JmGoodsResponse> findAllDetails(JmGoodsRequest jmGoodsRequest);

    /**
     * @Description:根据商品ids查询每个商品的属性个数
     * @Param goodsIds
     * @Return {@link List<  Map <Object,Object>>}
     * @Throws
     * @Author Abel Yang
     * @Date 2020/8/20/020 18:17
     */
    List<Map<Object,Object>> getGoodsMaterialCountByGoodsIds(List<Long> goodsIds);

    /**
     * 根据商品Id及仓库id查询该商品下物料详情(包括可用库存)
     * @param goodsId
     * @param warehouseId
     * @return
     */
    List<JmMaterialResponse> findMaterialsDetail(@Param("goodsId") Long goodsId, @Param("warehouseId")Long warehouseId);

    /**
     * 获取商品最大ID
     * @return
     */
    Long findMaxGoodsId();

    Integer findByGoodsName(String goodsName);

    /**
     * 根据属性及属性值名称获取属性值ID
     * @param attr
     * @param spec
     * @return
     */
    Long findAttrValueIdByName(@Param("attr") String attr,@Param("spec") String spec);
}
